// 请求基准地址
const baseUrl = import.meta.env.HY_SERVER_BASEURL
import { useUserStore } from '@/stores'

export type CustomRequestOptions = UniApp.RequestOptions & {
    query?: Record<string, any>
    /** 出错时是否隐藏错误提示 */
    hideErrorToast?: boolean
} & IUniUploadFileOptions // 添加uni.uploadFile参数类型

// 拦截器配置
const httpInterceptor = {
    // 拦截前触发
    invoke(options: CustomRequestOptions) {
        if (!options.url.startsWith('http')) {
            // #ifdef H5
            // 跨域代理
            options.url = import.meta.env.HY_APP_PROXY_PREFIX + options.url
            // #endif
            // 非H5正常拼接
            // #ifndef H5
            options.url = baseUrl + options.url
            // #endif
            // TIPS: 如果需要对接多个后端服务，也可以在这里处理，拼接成所需要的地址
        }
        // 1. 请求超时
        options.timeout = 10000 // 10s
        // 2. （可选）添加小程序端请求头标识
        options.header = {
            ...options.header,
        }
        // 3. 添加 token 请求头标识
        const userStore = useUserStore()
        const { isLogin, token } = userStore
        if (isLogin && token) {
            options.header.Authorization = token
        }
        return true
    },
}

// 拦截 request 请求
uni.addInterceptor('request', httpInterceptor)
// 拦截 uploadFile 文件上传
uni.addInterceptor('uploadFile', httpInterceptor)
